package com.bit.cfdi.web.dao.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.bit.cfdi.web.dao.DesgloseImpuestoDAO;
import com.bit.cfdi.web.domain.DesgloseImpuesto;

@Repository
public class DesgloseImpuestoDAOImpl extends HibernateDaoSupport implements DesgloseImpuestoDAO {

	@Autowired
	public void init(final SessionFactory sessionFactory) {
		setSessionFactory(sessionFactory);
	}

	@Override
	@Transactional public void save(DesgloseImpuesto desgloseImpuesto) {
		getHibernateTemplate().saveOrUpdate(desgloseImpuesto);
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional public DesgloseImpuesto getById(Long id) {
		List<DesgloseImpuesto> desglosesImpuestos = getHibernateTemplate().find(
				" from DesgloseImpuesto as di" + " where di.idDesgloseImpuesto=?", id);
		return desglosesImpuestos.size() > 0 ? desglosesImpuestos.get(0) : null;
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional public List<DesgloseImpuesto> getAll() {
		List<DesgloseImpuesto> desglosesImpuestos = getHibernateTemplate().find("" +
				"from DesgloseImpuesto as di");
		return desglosesImpuestos;
	}

	@SuppressWarnings("unchecked")
	@Override
	@Transactional public List<DesgloseImpuesto> getByComprobante(Long idComprobante) {
		List<DesgloseImpuesto> impuestos = getHibernateTemplate()
				.findByNamedParam(
						"from DesgloseImpuesto as dImp inner join fetch dImp.comprobante inner join fetch " +
						"dImp.impuesto where dImp.comprobante.idComprobante=:idComprobante",
						"idComprobante", idComprobante);

		return impuestos;
	}

}
